import os
import sys
import logging

from pytest_bdd import given, when, then, parsers

# fix ModuleNotFoundError: No module named 'common'
_curPath = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(_curPath)

from common.user import user, mock_get_age


@given(parsers.parse("{name} 几岁"))
def given_demo(name):
    logging.info("------你是在问 {} 多少岁是吗？-------".format(name))


@when(parsers.parse("应该是 {age}"))
def when_demo(age, monkeypatch):
    logging.info("------年龄能瞎几把问么？问就是 {}-------".format(age))

    # mock数据测试
    monkeypatch.setattr(user, "get_age", mock_get_age)
    real_age = user().get_age()
    logging.info("------真实年龄{}------".format(real_age))


@then("帅比")
def then_demo():
    logging.info("------还是个大帅比-------")


@given(parsers.parse("创建 {new:Number} 个用户", extra_types={"Number": int}), target_fixture="user_name")
def given_demo2(new):
    logging.info(f"------搞 {new} 个用户-------")
    return "liukang"


@when(parsers.parse("获取用户信息"))
def when_demo2(user_name):
    logging.info(f"------获取的用户信息: {user_name}-------")


# 步骤之间 数据传递通过target_fixture, 本质是构建fixture
@when(parsers.parse("修改用户信息"), target_fixture="new_user_name")
def when_demo2_2(user_name):
    new_user_name = user_name + "12138"
    logging.info(f"------修改用户信息: {new_user_name}-------")
    return new_user_name


@then("查看修改前修改后的用户信息")
@then("获取修改前修改后的用户信息")
def then_demo2(user_name, new_user_name):
    logging.info(f"------修改前用户信息: {user_name}------")
    logging.info(f"------修改后用户信息: {new_user_name}------")
